/**
 * <h3>IOpusService</h3>
 * <p> 作品信息管理服务接口 </p>
 *
 * <h3>功能描述</h3>
 * <p> 定义作品信息增删改查等基础业务操作，供实现类完成具体数据库交互逻辑 </p>
 * <p> 接口基于 MyBatis Plus 的 {@link IService} 扩展，统一规范数据访问层行为 </p>
 *
 * <h3>元数据</h3>
 * <ul>
 *    <li> 作者：郭强 </li>
 *    <li> 创建日期：2025年05月06日 21:15:20 </li>
 * </ul>
 *
 * <h3>其他信息</h3>
 * <ul>
 *    <li> 参考链接：<a href="https://example.com">官方网页</a></li>
 *    <li> 示例代码：{@code new IOpusService()} </li>
 * </ul>
 *
 * @apiNote 接口方法需保证事务一致性与线程安全；实际实现应避免直接new
 * @implSpec 继承自 {@link IService<OpusDTO>}，扩展了按条件查询、按ID获取等方法
 * @since 1.0.0
 */

package com.dnndo.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dnndo.system.domain.Opus;
import com.dnndo.system.domain.dto.OpusDTO;

import java.util.HashMap;
import java.util.List;

/**
 * 作品服务接口
 */
public interface IOpusService extends IService<OpusDTO> {

    /**
     * 根据条件分页查询作品列表
     *
     * @param dto 作品查询条件封装对象，包含名称、用户ID等过滤条件
     * @return List<Opus> 符合条件的作品信息列表
     * @see com.dnndo.system.domain.dto.OpusDTO
     */
    List<Opus> selectOpusList(OpusDTO dto);

    /**
     * 查询设计师列表
     *
     * @param dto 作品查询条件封装对象，包含名称、用户ID等过滤条件
     * @return List<Opus> 符合条件的作品信息列表
     * @see com.dnndo.system.domain.dto.OpusDTO
     */
    List<HashMap<String, Object>> selectdesignerlist(OpusDTO dto);

    /**
     * 根据作品ID获取详细信息
     *
     * @param opusId 作品唯一标识符
     * @return Opus 包含作品详细信息的数据对象
     * @see com.dnndo.system.domain.dto.OpusDTO
     */
    OpusDTO selectOpusListById(Long opusId);

    /**
     * 根据用户ID获取详细信息
     *
     * @param userId 作品唯一标识符
     * @return Opus 包含作品详细信息的数据对象
     * @see com.dnndo.system.domain.dto.OpusDTO
     */
    HashMap<String,Object> selectdesignerListById(Long userId);

    /**
     * 修改已有作品信息
     *
     * @param opusDTO 包含更新字段的作品数据对象
     * @return int 受影响的数据库记录数，用于判断操作是否成功
     * @see com.dnndo.system.domain.dto.OpusDTO
     */
    int updateOpusById(OpusDTO opusDTO);

    /**
     * 新增作品信息
     *
     * @param opusDTO 包含新增字段的作品数据对象
     * @return int 受影响的数据库记录数，用于判断操作是否成功
     * @see com.dnndo.system.domain.dto.OpusDTO
     */
    int insertOpus(OpusDTO opusDTO);

    /**
     * 删除指定ID的作品信息
     *
     * @param opusId 要删除的作品唯一标识符
     * @return int 受影响的数据库记录数，用于判断操作是否成功
     * @see com.dnndo.system.domain.dto.OpusDTO
     */
    int deleteOpusById(Integer opusId);
}
